package com.algorithm.stack;/*
 *@Author:DOWN
 *@Date:2021/12/27 17:29
 *@Comment:
 */

import java.util.Stack;

public class MinStack {
    private Stack<Integer>stack1,stack2;
    public MinStack() {
        stack1=new Stack<>();
        stack2=new Stack<>();
    }

    /**
     * 将元素 x 推入栈中。
     * @param val 元素
     */
    public void push(int val) {
        stack1.add(val);
        if(stack2.isEmpty()){
            stack2.add(val);
        }else {
            if(val<=stack2.peek()){
                stack2.add(val);
            }
        }
    }

    /**
     * 删除栈顶的元素。
     */
    public void pop() {
        if(!stack2.isEmpty()){
            if(stack2.peek().equals(stack1.pop())){
                stack2.pop();
            }
        }
    }

    /**
     * 获取栈顶元素。
     * @return int
     */
    public int top() {
        return stack1.peek();
    }

    /**
     * 检索栈中的最小元素
     * @return int
     */
    public int getMin() {
        return stack2.peek();
    }
    public static void main(String[] arrs){
        MinStack minStack = new MinStack();
        minStack.push(-2);
        minStack.push(0);
        minStack.push(-3);
        System.out.println(minStack.getMin());
        minStack.pop();
        System.out.println(minStack.top());
        System.out.println(minStack.getMin());

    }
}
